package com.example.mq.RabbitMQ;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;

/**
 * @author Jason
 * @PACKAGE_NAME com.example.mq.RabbitMQ
 * @Description 订阅端
 * @date 2023-11-20 10:13
 */
public class Consumer {
    private final static String QUEUE_NAME = "hello"; // 定义队列名称
    public static void main(String[] args) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        // 创建连接工厂
        factory.setHost("localhost"); // 设置 RabbitMQ 服务器的地址
        // 设置连接到 RabbitMQ 的主机地址
        Connection connection = factory.newConnection();
        // 建立到代理服务器的连接
        Channel channel = connection.createChannel();
        // 创建一个信道
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        // 声明一个队列，如果队列存在则什么都不做，否则创建该队列
        System.out.println(" [*] 等待接收消息。退出请按 CTRL+C");
        // 控制台打印等待接收消息的提示
        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String message = new String(delivery.getBody(), "UTF-8");
            // 将接收到的消息转换为字符串
            System.out.println(" [x] 接收到消息：'" + message + "'");
            // 控制台打印接收到的消息
        };
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> {});
        // 指定消费队列，并处理接收到的消息
    }
}
